<?php

namespace App\Service\QueueService;

use Hyperf\AsyncQueue\Driver\DriverFactory;
use Hyperf\AsyncQueue\Driver\DriverInterface;

/**
 * 推送REDIS 异步消费队列功能
 * @author chenshubo
 */
class BaseQueueService
{
    //默认延时处理功能
    protected $delay_timestamp = 3;
    protected $delay_job_path  = "\\App\\Job\\";
    protected $job_id;
    
    /**
     * @var DriverInterface
     */
    protected $driver;
    public function __construct(DriverFactory $driverFactory)
    {
        $this->driver = $driverFactory->get('default');
    }
    
    /**
     * 生产消息.
     * @param $params 数据
     * @param int $delay 延时时间 单位秒
     */
    public function push(array $param = [])
    {
        // 这里的 `ExampleJob` 会被序列化存到 Redis 中，所以内部变量最好只传入普通数据
        // 同理，如果内部使用了注解 @Value 会把对应对象一起序列化，导致消息体变大。
        // 所以这里也不推荐使用 `make` 方法来创建 `Job` 对象。
        $job = $this->delay_job_path . $this->job_id;
        return $this->driver->push(new $job($param),$this->delay_timestamp);
    }
}